package com.tangyuan.common.util;

import com.aliyun.oss.HttpMethod;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.CannedAccessControlList;
import com.aliyun.oss.model.GeneratePresignedUrlRequest;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectRequest;
import lombok.Data;
import org.springframework.web.multipart.MultipartFile;

import java.net.URL;
import java.util.Date;

@Data
public class VideoOSSUtils {
    //TODO
    private static String endpoint = "oss-cn-qingdao.aliyuncs.com"; // 阿里云 OSS 外网或内网地址
    private static String accessKeyId = "LTAI5tQZMYYEwFYBC8vYCkPR"; // 阿里云账号 AccessKeyId
    private static String accessKeySecret = "FKqXvgNCC5ivMFLcqZHh0TXF7u0iyF"; // 阿里云账号 AccessKeySecret
    private static String bucketName = "shengtangfeng1"; // 存储空间名称

    public static String upload(MultipartFile file, String objectKey) {
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        try {
            // 创建PutObjectRequest对象
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectKey, file.getInputStream());

            // 设置ObjectMetadata
            ObjectMetadata metadata = new ObjectMetadata();
            metadata.setContentType("video/mp4");
            metadata.setHeader("x-oss-force-download", false);
            putObjectRequest.setMetadata(metadata);
            // 设置文件访问权限，默认是私有读写
            ossClient.putObject(putObjectRequest);

            // 设置文件访问权限（可选）
            ossClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);

            // 获取上传后的文件URL
            String objectUrl = "https://" + bucketName + "." + endpoint + "/" + objectKey;

            return objectUrl;
        } catch (Exception e) {
            // 处理异常
            e.printStackTrace();
            return null;
        } finally {
            // 关闭OSSClient
            ossClient.shutdown();
        }
    }

  /*  public static void main(String[] args) {
        // 填写视频文件的完整路径。
        String objectName = "https://shengtangfeng1.oss-cn-qingdao.aliyuncs.com/2024-04-15T10:55:02.444aac043c6919531fa7626786d.mp4";
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        // 使用精确时间模式截取视频1s处的内容，输出为JPG格式的图片，宽度为800，高度为600。
        //如果要第一帧 应该用t_1 第一毫秒就可以 但很多视频前面几帧是纯黑的 所以我用第一秒
        String style = "video/snapshot,t_1000,f_jpg,w_800,h_600";
        // 指定过期时间为一年
        Date expiration = new Date(new Date().getTime() + 1000 * 60 * 60 * 24 * 365 );
        GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest("shengtangfeng1", objectName, HttpMethod.GET);
        req.setExpiration(expiration);
        req.setProcess(style);
        URL signedUrl = ossClient.generatePresignedUrl(req);
        //这里注意,最终的结果是拼接在原视频地址后面的,拼接方式是?x-oss-process=
        //这一部分在query当中,我根据等号切割拿到最后一部分再在前面手动拼接上形成最终图片url
        String query = signedUrl.getQuery();
        String[] split = query.split("=");
        String url = objectName+"?x-oss-process="+split[split.length-1];
        // 关闭OSSClient。
        ossClient.shutdown();
    }*/

    public static String getImageByVideo(String VideoUrl){
        // 填写视频文件的完整路径。
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        // 使用精确时间模式截取视频1s处的内容，输出为JPG格式的图片，宽度为800，高度为600。
        //如果要第一帧 应该用t_1 第一毫秒就可以 但很多视频前面几帧是纯黑的 所以我用第一秒
        String style = "video/snapshot,t_1000,f_jpg";
        // 指定过期时间为一年
        Date expiration = new Date(new Date().getTime() + 1000 * 60 * 60 * 24 * 365 );
        GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest("shengtangfeng1", VideoUrl, HttpMethod.GET);
        req.setExpiration(expiration);
        req.setProcess(style);
        URL signedUrl = ossClient.generatePresignedUrl(req);
        //这里注意,最终的结果是拼接在原视频地址后面的,拼接方式是?x-oss-process=
        //这一部分在query当中,我根据等号切割拿到最后一部分再在前面手动拼接上形成最终图片url
        String query = signedUrl.getQuery();
        String[] split = query.split("=");
        String imageurl = VideoUrl+"?x-oss-process="+split[split.length-1];
        // 关闭OSSClient。
        ossClient.shutdown();
        return imageurl;
    }

    public static void delOssFile(String objectName) {
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        objectName =objectName.replaceAll("https://"+bucketName+"."+endpoint+"/", "");
        try {
            // 删除文件或目录。如果要删除目录，目录必须为空。
            /**
             * objectName指文件目录地址，例如：空间名/文件地址
             * 例如：https://douyin-xjy.oss-cn-hangzhou.aliyuncs.com/douyin-xjy/hecheng/2023/04/20/e365a31b279e421a9fd295a0441dd92f.mp4
             * douyin-xjy：为设置的阿里云存储对象OSS空间名
             * objectName = douyin-xjy/hecheng/2023/04/20/e365a31b279e421a9fd295a0441dd92f.mp4
             */
            //https://shengtangfeng1.oss-cn-qingdao.aliyuncs.com/2024-04-28T09:11:41.316172740e0afcd9f39f5a06683.mp4
            ossClient.deleteObject(bucketName, objectName);

            // 关闭OSSClient。
            ossClient.shutdown();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }

}
